package Exception;

/**
 * 因为项目中会出现特有的问题
 * 而这些问题并未被java所描述并封装对象
 * 所以对于这些特有的问题可以按照java的对问题封装的思想
 * 将特有的问题,进行自定义的异常封装
 * <p>
 * <p>
 * 当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理操作
 * 要么在内部try  catch处理.
 * 要么在函数上声明让调用者处理.
 * <p>
 * 一般情况在,函数内出现异常,函数上属性要声明
 * <p>
 * 发现打印的结构只有异常的名称,却没有异常的信息.
 * 因为自定义的异常并未定义定义信息
 *
 *
 * 如何定义异常信息?
 * 因为父类中已经把异常信息的操作完成了
 * 所以子类只要在构造时,将异常信息传递给父类通过super语句
 *那么就可以直接通过getMessage方法获取自定义的异常
 *
 *throws和throw的区别
 * throws使用在函数上,(要写在小括号和大括号之间)   int div(int a, int b) throws FushuException
 * throw使用在函数内    throw new FushuException("出现了除数是负数的情况/ by fushu");
 *
 * throws后面跟的异常类,可以跟多个,用逗号隔开
 * throw后面跟的时异常对象.
 *
 */

class FushuException extends Exception {

    private String msg;
    FushuException(String msg) {
        this.msg = msg;
    }

    public String getMessage() {
        return msg;
    }
}


class Demo03 {

    int div(int a, int b) throws FushuException {
        if (b < 0) {
            throw new FushuException("出现了除数是负数的情况/ by fushu"); //手动通过throw关键字抛出一个自定义异常对象
        }
        return a / b;
    }

}

class ExceptionDemo03 {
    public static void main(String[] args) {
        Demo03 d = new Demo03();
        try {
            int x = d.div(4, -1);
            System.out.println("x= " + x);
        } catch (FushuException e) {
            System.out.println("除数出现负数了");
            System.out.println(e.toString());
        }

        System.out.println("over");
    }
}